package com.tulele.vtool.mapper;

import com.tulele.vtool.model.LookArticleInfo;
import com.tulele.vtool.model.VideoInfo;
import com.tulele.vtool.model.combinedEntity.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

@Component(value = "videoInfoMapper")
public interface VideoInfoMapper {

    /**
     * 添加文章信息
     * @param videoInfo
     * @return
     */
    int addVideoInfo(VideoInfo videoInfo);

    /**
     * 更新文章信息
     * @param videoInfo
     * @return
     */
    int updateVideoInfo(VideoInfo videoInfo);

    /**
     * 获取文章详情
     * @param videoId
     * @return
     */
    VideoInfo queryVideoDetailInfo(Integer videoId);

    /**
     * 查询用户查看他人文章信息
     * @param lookVideoInfo
     * @return
     */
    List<CombinedUserLookOtherVideoInfo> queryUserLookOtherVideoInfo(LookArticleInfo lookVideoInfo);

    /**
     * 根据品牌查询文章信息
     * @param userId
     * @return
     */
    List<CombinedVideoInfoByVideoBrand> queryVideoInfoByBrand(Integer userId);

    /**
     * 根据文章类型查询文章信息
     * @param videoTypeId
     * @return
     */
    List<CombinedVideoInfoByVideoType> queryVideoInfoByVideoType(Integer videoTypeId);

    /**
     * 查询指定数目的用户文章
     * @param userId
     * @return
     */
    List<CombinedUserVideoInfoBySpecialSize> queryUserVideoInfoBySpecialSize(@Param("userId") Integer userId, @Param("recordSize") int recordSize);

    /**
     * 查询用户文章
     * @param userId
     * @return
     */
    List<CombinedUserOwnVideoInfo> queryUserOwnVideoInfo(Integer userId);

    /**
     * 删除文章信息
     * @param videoInfo
     * @return
     */
    int deleteUserVideoInfo(VideoInfo videoInfo);

    /**
     * 查询文章用户信息
     * @param videoId
     * @return
     */
    Integer queryVideoUserInfo(Integer videoId);

    /**
     * 平台推荐文章信息
     * @return
     */
    List<PlatformRecommendVideoInfo> queryPlatformRecommendVideoInfo();

    /**
     * 查询第三方爬取文章信息
     * @param videoInfo
     * @return
     */
    VideoInfo querySpiderVideoInfoByThirdVideoId(VideoInfo videoInfo);

    /**
     * 查询用户平台文章分享状态
     * @param videoInfo
     * @return
     */
    Integer queryUserPlatformVideoShareStatus(VideoInfo videoInfo);

    /**
     * 查询平台品牌文章数据
     * @param brandId
     * @return
     */
    Integer queryPlatformVideoCountByBrandId(Integer brandId);

    /**
     * 查询平台类型文章数据
     * @param typeId
     * @return
     */
    Integer queryPlatformVideoCountByTypeId(Integer typeId);

    /**
     * 获取待处理的爬虫文章
     * @return
     */
    List<VideoInfo> queryToBeProcessedSpiderVideoInfo();

    /**
     * 根据品牌查询平台给用户推荐文章
     * @return
     */
    List<PlatformRecommendVideoInfo> queryPlatformRecommendVideoInfoByBrand(@Param("brandIds") List<Integer> useBrandIds);

    /**
     * 根据类型查询平台给用户推荐文章
     * @return
     */
    List<PlatformRecommendVideoInfo> queryPlatformRecommendVideoInfoByType(Integer userId);

    /**
     * 根据品牌随机查询文章信息
     * @param videoBrandId
     * @param recordSize
     * @return
     */
    List<CombinedVideoInfoByVideoBrand> queryVideoInfoByBrandForRand(@Param("videoBrandId") Integer videoBrandId, @Param("recordSize") int recordSize);

    /**
     * 根据文章类型随机查询文章信息
     * @param videoTypeId
     * @param recordSize
     * @return
     */
    List<CombinedVideoInfoByVideoType> queryVideoInfoByVideoTypeForRand(@Param("videoTypeId") Integer videoTypeId, @Param("recordSize") int recordSize);

    /**
     * 根据文章类型随机查询文章信息
     * @param videoTypeId
     * @param recordSize
     * @return
     */
    List<CombinedVideoInfoByVideoType> queryVideoInfoByUserVideoTypeForRand(@Param("videoTypeIds") List<Integer> videoTypeId, @Param("recordSize") int recordSize);

    /**
     * 更新站内文章阅读数
     * @param videoId
     * @return
     */
    int updVideoInReadCount(Integer videoId);

    /**
     * 更新站外文章阅读数
     * @param videoId
     * @return
     */
    int updVideoOutReadCount(Integer videoId);

    /**
     * 更新文章分享数
     * @param videoId
     * @return
     */
    int updVideoShareCount(Integer videoId);

    /**
     * 查询待添加至redis的品牌文章信息
     * @return
     */
    List<CombinedVideoInfoByVideoBrand> queryToBeAddToRedisVideoInfoOfBrand();

    /**
     * 查询需要从redis中移除的品牌文章信息
     * @return
     */
    List<CombinedVideoInfoByVideoBrand> queryToBeRemoveFromRedisVideoInfoOfBrand();

    /**
     * 查询待添加至redis的类型文章信息
     * @return
     */
    List<CombinedVideoInfoByVideoBrand> queryToBeAddToRedisVideoInfoOfType();

    /**
     * 查询需要从redis中移除的类型文章信息
     * @return
     */
    List<CombinedVideoInfoByVideoBrand> queryToBeRemoveFromRedisVideoInfoOfType();

    /**
     * 临时查询无缩略图的文章
     * @return
     */
    List<CombinedVideoInfoByVideoBrand> tempQueryThumbnailNullInfo();

    /**
     * 查询用户分享的文章数目
     * @param userId
     * @return
     */
    Integer queryUserSharedVideoCount(@Param("userId") Integer userId);

    /**
     * 根据文章类型的文章热度值查询文章信息
     * @param videoTypeId
     * @return
     */
    List<VideoListShowInfo> queryVideoInfoByVideoTypeForHotScore(@Param("videoTypeId") Integer videoTypeId, @Param("videoHotValue") Integer videoHotValue);

    /**
     * 根据文章类型的文章热度值查询文章总数
     * @param videoBrandId
     * @param videoHotValue
     * @return
     */
    List<VideoListShowInfo> queryVideoInfoByVideoBrandForHotScore(@Param("videoBrandId") Integer videoBrandId, @Param("videoHotValue") Integer videoHotValue);

    /**
     * 根据文章类型的文章热度值查询指定数目的文章信息
     * @param videoTypeId
     * @return
     */
    List<VideoListShowInfo> queryVideoInfoByVideoTypeForHotScoreBySpecialSize(@Param("videoTypeId") Integer videoTypeId, @Param("videoHotValue") Integer videoHotValue, @Param("recordSize") Integer recordSize);

    /**
     * 根据标题查询用户已经添加的微信文章ID
     * @param videoTitle
     * @return
     */
    VideoInfo queryUserAddedWxVideoInfoByTitle(@Param("userId") Integer userId, @Param("videoTitle") String videoTitle);

}